/**************************************************************************** 
 * Meta，一个轻量级的静态分区Hypervisor 
 *
 * 版权(c) , 2022-
 *
 * 作者:
 *      Tupelo Shen <shenwanjiang2013@163.com>
 *
 * Meta是一个自由软件，你可以在遵循GNU GPLv2协议的条件下，重新修改并发布它。
 *
 ***************************************************************************/

#include <meta.h>
#include <cpu.h>
#include <console.h>
#include <interrupts.h>
#include <vmm.h>

/**
 * 功能描述: hypervisor初始化函数，也是主入口
 * 入口参数: cpu_id:        CPU核ID
 *           load_addr:     加载物理地址
 *           config_addr:   配置信息的物理地址
 * 出口参数: void
 * 返 回 值: void
 * 修改日期: 2022-09-21
 */
void init(cpuid_t cpu_id, paddr_t load_addr, paddr_t config_addr)
{
    /**
     * 这些初始化必须按照固定顺序首先执行
     */
    cpu_init(cpu_id, load_addr);
    mem_init(load_addr, config_addr);

    //  -------------------------------------------------------------- 
    if (cpu.id == CPU_MASTER) {
        console_init();
        printk("Meta Hypervisor\n\r");
    }

    interrupts_init();

    vmm_init();

    /* Should never reach here */
    while (1);
}